#ifndef _LOTNISKO
#define _LOTNISKO
#include "header.h"
#include "Samolot.h"
#include <vector>

#include <time.h>
#include <pthread.h>

#include <deque>

class Komunikacja;
class LLotnisko
{
private:
	int id_lotniska;
	string nazwa;
	int pojemnosc;
	int ile_samolotow;
	
	float szerokosc;
	float dlugosc;
	int ile_szerokich_pasow;
	int ile_waskich_pasow;
	
	int ile_szerokich_wolnych;
	int ile_waskich_wolnych;


	
	bool awaria[3];   
	string awaria_opis[3];

	vector<string> nazwya;
	vector<string> podtypya;
	vector<int> stopniea;
	
	float wspolczynnikObslugi;//realny czas obslugi to wspolczynnikObslugi * czasObslugiSamolotu
	//normalnie wynosi 1 zwieksza sie przy awariach


public:

	

	float zasieg;
	Samolot * listaSamolotow[N];
	bool autooperator; // 0- obsluga czlowieka, 1 - sztuczna inteligencja.
	
	long double lista_ziemia[N];
	long double lista_powietrze[N];
	
	void SI_radar();
	void SI_kontroler();
	pthread_t radar, kontroler;
	
	GUI * gui;
	
	Komunikacja * komunikacja;
	
	LLotnisko(Komunikacja * kom, int);
	
	
	void wlaczAutooperatora();
	void wylaczAutooperatora();
	
	//wywoluje komunikacja
	void setAwaria (string nazwa, string podtyp, int stopien);
	//ma DOPISYWAC stringi awarii pod okreslony podtyp 0 dla pasow A, 1 dla pasow B oraz 2 dla czasu hangarowania.
	//i ma inta o stopniu awarii
	
	void usunAwarie();
	
	void getLotnisko(int id_lotniska, string nazwa, int pojemnosc, float szerokosc, float dlugosc, 
							int ile_waskich_pasow, int ile_szerokich_pasow);
	
	
	void resetAwaria (string nazwa);
	//usuwac ma stringi o awariach i zerowac stopnie
	
	
	void wystartujSamolot(int id, bool czySzeroki);
	// ma zmieniac status samolotu o id na leci
	//ma wywolac funkcja Komunikacji  
	
	void zakazStartu(int id, int czas);
	//Ma wywolac funckje Komunikacji.
	
	void wyladujSamolot(int id, bool czySzeroki);
	//zmienia status na na ziemi
	//wywoluje funkcje Komunikacji.
	
	void zakazWyladowania(int id, int czas);
	//Ma wywolac funckje Komunikacji.
	//zmienia status na koluje
	
	//dostaje id float i float i bool awaria
	void polozenieSamolotu(int id, float polozenieX,float polozenieY);
	//ustawia polozenie samolotu id.
	
	void odeslijSamolot(int id);
	//zmienia status na leci
	//wywoluje funkcje Komunikacji
	
	
	
	void hangarujSamolot(int id);
	//wywolywane gdy czas oblugi minie
	//zmienia status na hangarowany
	
	
	void gotowyDoStartu(int id);
	// wywolywana przez kom_Chce_Startowac()
	
	void dodajSamolot(Samolot * samolot);
	
	
	
	//GETYSETY
	int get_id_lotniska();
	string get_nazwa();
	int get_pojemnosc();
	int get_ile_samolotow();
	float get_szerokosc();
	float get_dlugosc();
	int get_ile_szerokich_pasow();
	int get_ile_waskich_pasow();
	int get_ile_szerokich_wolnych();
	int get_ile_waskich_wolnych();
	float get_wspolczynnikObslugi();
	bool get_autooperator();
	
	void set_id_lotniska(int id);
	void set_nazwa(string n);
	void set_pojemnosc(int p);
	void set_ile_samolotow(int i);
	void set_szerokosc(int s);
	void set_dlugosc(int d);
	void set_ile_szerokich_pasow(int i);
	void set_ile_waskich_pasow(int i);
	void set_ile_szerokich_wolnych(int i);
	void set_ile_waskich_wolnych(int i);	
	void set_wspolczynnikObslugi(float w);
	void set_autooperator(bool b);
	
	
};


#endif
